package com.kakarote.examine.service;

import com.kakarote.common.log.entity.OperationLog;
import com.kakarote.core.entity.BasePage;
import com.kakarote.core.feign.admin.entity.ExamineEmailBO;
import com.kakarote.core.feign.examine.entity.ExamineFlowFinalBO;
import com.kakarote.core.feign.oa.entity.OaSearchBO;
import com.kakarote.examine.entity.BO.*;
import com.kakarote.examine.entity.PO.ExamineRecordEmail;
import com.kakarote.examine.entity.VO.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface ISuperExamineService {

    /**
     * 查询最近常使用的审批
     *
     * @return
     */
    public List<ExamineVO> recentlyUsedExamineList();

    SuperExamineReportHeadVO getExamineReportInfo(SuperExamineReportSearchBO searchBO);

    BasePage<SuperExamineReportListVO> getExamineReportList(SuperExamineReportSearchBO searchBO);

    void getExamineReporExport(HttpServletResponse response, SuperExamineReportSearchBO searchBO);

    /**
     * 申请列表
     *
     * @return
     */
    public List<SupperExamineApplyVO> applyList();


    /**
     * 查询分组列表
     *
     * @param examinePageBo 分组类型：0 OA
     */
    List<ExamineGroupVO> queryExamineGroup(ExaminePageBO examinePageBo);


    /**
     * 查询分组列表-不含审批列表
     *
     * @param examinePageBo 分组类型：0 OA
     */
    List<ExamineGroupVO> querySimplyExamineGroup(ExaminePageBO examinePageBo);

    /**
     * 首页搜索
     *
     * @param content
     * @return
     */
    public BasePage<OaSuperExamineVO> querySuperExamineInfoByName(OaSearchBO content);

    /**
     * 查询最近常使用的审批
     *
     * @return
     */
    public List<ExamineVO> querySuperExamineByName(SuperExamineSearchBO superExamineSearchBO);


    /**
     * 待办查询
     *
     * @return
     */
    public SuperExamineBackLogVO queryBackLogInfo();


    /**
     * 追踪查询
     *
     * @return
     */
    public SuperExamineTraceVO queryTraceInfo();


    /**
     * 新建分组
     *
     * @param examineGroupBO
     * @return
     */
    public OperationLog addOrUpdateExamineGroup(ExamineGroupBO examineGroupBO);


    /**
     * 删除分组
     *
     * @param groupIdList
     * @return
     */
    public List<OperationLog> delExamineGroup(List<Long> groupIdList);


    /**
     * 查询记录列表
     *
     * @return
     */
    List<Long> queryTimeOutRecordList();


    /**
     * 功能描述: <br>
     * 〈报表---列表下钻信息〉
     *
     * @param:
     * @throws:
     * @author: zyh
     * @date: 2022/10/18 14:33
     */
    BasePage<com.kakarote.core.feign.oa.entity.ExamineVO> getExamineReportSubList(SuperExamineReportSubSearchBO searchBO);

    /**
     * 功能描述: <br>
     * 〈无分组申请列表〉
     *
     * @param:
     * @throws:
     * @author: zyh
     * @date: 2022/10/18 14:33
     */
    List<ExamineVO> uniApplyList();

    /**
     * 功能描述: <br>
     * 〈设置邮件审批有效性〉
     *
     * @param: examineBO
     * @return: void
     * @throws:
     * @author: zyh
     * @date: 2022/10/29 17:13
     */
    void setEmailAuditValid(ExamineEmailBO examineBO);

    /**
     * 功能描述: <br>
     * 〈设置邮件审批有效性〉
     *
     * @param: examineBO
     * @return: void
     * @throws:
     * @author: zyh
     * @date: 2022/10/29 17:13
     */
    ExamineRecordEmail getEmailToken(String key);


    /**
     * 设置节点自选
     *
     * @param flowFinalBO
     */
    void setNodeOptional(ExamineFlowFinalBO flowFinalBO);
}
